package com.rickpan.service;

import com.rickpan.entity.User;
import com.rickpan.enums.Permission;

import java.util.List;
import java.util.Set;

/**
 * 权限服务接口
 */
public interface PermissionService {

    /**
     * 检查用户是否具有指定权限
     */
    boolean hasPermission(Long userId, Permission permission);

    /**
     * 检查用户是否具有指定权限（批量检查）
     */
    boolean hasPermissions(Long userId, List<Permission> permissions, boolean requireAll);

    /**
     * 检查用户是否为VIP
     */
    boolean isVip(Long userId);

    /**
     * 检查用户是否为管理员
     */
    boolean isAdmin(Long userId);

    /**
     * 检查用户是否为团队成员
     */
    boolean isTeamMember(Long userId, Long teamId);

    /**
     * 检查用户是否为团队管理员
     */
    boolean isTeamAdmin(Long userId, Long teamId);

    /**
     * 检查用户是否为团队所有者
     */
    boolean isTeamOwner(Long userId, Long teamId);

    /**
     * 获取用户所有权限
     */
    Set<Permission> getUserPermissions(Long userId);

    /**
     * 获取用户类型对应的默认权限
     */
    Set<Permission> getDefaultPermissions(User.UserType userType);

    /**
     * 检查团队操作权限
     */
    boolean canOperateTeam(Long userId, Long teamId, Permission permission);

    /**
     * 检查项目操作权限
     */
    boolean canOperateProject(Long userId, Long projectId, Permission permission);

    /**
     * 检查文件操作权限
     */
    boolean canOperateFile(Long userId, Long fileId, Permission permission);
}
